"""
测试File_Utils功能
"""

import os
import tempfile
from com.tools.File_Utils import FileUtils


def test_file_utils():
    """
    测试文件工具类
    """
    # 创建临时目录用于测试
    with tempfile.TemporaryDirectory() as temp_dir:
        print(f"使用临时目录进行测试: {temp_dir}")
        
        # 测试文件路径
        test_file = os.path.join(temp_dir, "test.txt")
        copy_file = os.path.join(temp_dir, "copy.txt")
        move_file = os.path.join(temp_dir, "move.txt")
        converted_file = os.path.join(temp_dir, "converted.txt")
        
        print("\n测试文件写入和读取:")
        
        # 测试写入文件
        content = "Hello, World!\n这是一个测试文件。\n包含中文内容。"
        FileUtils.write_file(test_file, content, encoding="utf-8")
        print(f"写入文件: {test_file}")
        
        # 测试读取文件
        read_content = FileUtils.read_file(test_file, encoding="utf-8")
        print(f"读取文件内容:\n{read_content}")
        assert read_content == content
        
        print("\n测试文件复制:")
        
        # 测试复制文件
        success = FileUtils.copy_file(test_file, copy_file)
        print(f"复制文件结果: {success}")
        assert success == True
        
        # 验证复制的文件内容
        copied_content = FileUtils.read_file(copy_file, encoding="utf-8")
        print(f"复制的文件内容:\n{copied_content}")
        assert copied_content == content
        
        print("\n测试文件移动:")
        
        # 测试移动文件
        success = FileUtils.move_file(copy_file, move_file)
        print(f"移动文件结果: {success}")
        assert success == True
        
        # 验证移动后的文件是否存在
        assert FileUtils.file_exists(move_file) == True
        assert FileUtils.file_exists(copy_file) == False
        
        print("\n测试文件搜索:")
        
        # 测试搜索字符串出现次数
        count = FileUtils.search_string_in_file(test_file, "测试")
        print(f"'测试' 在文件中出现次数: {count}")
        assert count == 1  # 在内容中出现一次
        
        # 测试搜索字符串出现的行号
        line_numbers = FileUtils.search_string_in_file_lines(test_file, "文件")
        print(f"'文件' 出现在行号: {line_numbers}")
        assert 2 in line_numbers  # 第2行包含"文件"
        
        print("\n测试文件信息获取:")
        
        # 测试获取文件信息
        info = FileUtils.get_file_info(test_file)
        print(f"文件信息: {info}")
        assert 'size' in info
        assert 'modified_time' in info
        assert info['is_file'] == True
        
        # 测试获取文件大小
        size = FileUtils.get_file_size(test_file)
        print(f"文件大小: {size} 字节")
        assert size > 0
        
        print("\n测试目录操作:")
        
        # 测试创建目录
        new_dir = os.path.join(temp_dir, "new_directory")
        success = FileUtils.create_directory(new_dir)
        print(f"创建目录结果: {success}")
        assert success == True
        assert FileUtils.directory_exists(new_dir) == True
        
        # 测试递归创建目录
        nested_dir = os.path.join(temp_dir, "parent", "child", "grandchild")
        success = FileUtils.create_directory(nested_dir, parents=True)
        print(f"递归创建目录结果: {success}")
        assert success == True
        assert FileUtils.directory_exists(nested_dir) == True
        
        print("\n测试文件列表:")
        
        # 在新目录中创建一些测试文件
        FileUtils.write_file(os.path.join(new_dir, "file1.txt"), "content1")
        FileUtils.write_file(os.path.join(new_dir, "file2.txt"), "content2")
        FileUtils.write_file(os.path.join(new_dir, "file3.log"), "log content")
        
        # 测试列出目录中的文件
        files = FileUtils.list_files(new_dir)
        print(f"目录中的文件: {files}")
        assert len(files) == 3
        
        # 测试列出特定扩展名的文件
        txt_files = FileUtils.list_files(new_dir, extension=".txt")
        print(f"目录中的txt文件: {txt_files}")
        assert len(txt_files) == 2
        
        print("\n测试文件存在性检查:")
        
        # 测试文件存在性检查
        assert FileUtils.file_exists(test_file) == True
        assert FileUtils.file_exists("nonexistent.txt") == False
        
        # 测试目录存在性检查
        assert FileUtils.directory_exists(new_dir) == True
        assert FileUtils.directory_exists("nonexistent_dir") == False
        
        print("\n所有测试通过!")


if __name__ == "__main__":
    test_file_utils()